#include<iostream>
using namespace std;
/*
作用：通过重载递增运算符，实现自己的整型数据
总结：前置递增返回引用，后置递增返回值
*/
//自定义整型
class MyInteger
{
    friend ostream& operator<<(ostream& cout,MyInteger myint);
public:
    MyInteger()
    {
        m_Num=0;
    }
    //重载前置++运算符
    MyInteger& operator++()//返回引用是为了一直对一个数据进行递增操作
    {
        //先进行++运算
        m_Num++;
        //再将自身做返回
        return *this;
    }
    //重载后置++运算符
    MyInteger operator++(int)//int代表占位参数，可以用于区分前置和后置递增
    {
        //先 记录当时结果
        MyInteger temp=*this;//temp是局部变量，会被释放掉，所以不返回引用
        //后 递增
        m_Num++;
        //最后将记录结果做返回
        return temp;
    }
private:
    int m_Num;
};
//重载<<运算符
ostream& operator<<(ostream& cout,MyInteger myint)
{
    cout<<myint.m_Num;
    return cout;
}
void test01()
{
    MyInteger myint;
    cout<<++(++myint)<<endl;//2
}
void test02()
{
    MyInteger myint;
    cout<<myint++<<endl;//0
    cout<<myint<<endl;//1
}
int main()
{
    test01();
    test02();
}